Приложение 2 к отчету по теме "Анализ влияния параметров многофазного потока на механическую устойчивость трубопровода в условиях Новопортовского месторождения "
Файл с анализом результатов массовых расчетов режима работы трубопровода в OLGA
версия 0.4 (Шабонас Артур, Хабибуллин Ринат) от 08.10.2017
Сравнение результатов расчета на динамическом многофазном симуляторе для двух вариантов элемента трубопровода длиной 1500 м. Рассматриваются модели трубопровода аналогичного трубопроводу Новопортовского месторождения по геометрическим параметров и параметрам флюидов. Данный файл является расчетным файлом и содержит программный код выполняющий расчет и построение графиков а также результаты расчета.
""" импортируем библиотеки необходимые для проведения расчетов"""
import tplread as tp
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%pylab inline
На динамическом симуляторе проведены параметрические расчеты. Результаты расчетов записываются в файл. Один файл соответсвует одному расчету - набору дебитов жидкости, газа и давления в элементе трубопровода. Читаем данные из каталога с результатам расчетов.
Загружается два вида моделей:
первая модель описывает участок трубопровода с одним "горбом" и длинным горизонтальным участком после него

вторая модель описывает участок трубопровода без "горба" - плоский

Обе модели содержат одинаковое количество контрольных точек в которых контролируются параметры потока. Обе модели запускались для различных расходов газа, жидкости и различных значений давления на конце трубопровода.
Задачи моделей можно сформулировать следующим образом:
# читаем сначала данные плоской модели
tsim = tp.TplParams('NPsimple/')
tsim.read_data()
tsim.calc_data()
# затем читаем данные модели с одним горбом модели
tpl = tp.TplParams('NPtest1/')
tpl.read_data()
tpl.calc_data()
#print(t.df_super)
Проверяются заголовки ключевых слов, диапазоны изменения параметров.
def check(t):
# процедура вывод результатов проверки загрузки данных
print(" файлов прочитано", len(t.files))
print('ключевые слова для расчетов ',t.key_list)
print('полный список ключевых слов ',t.key_list_all)
print('список точек контроля параметров ',t.pipe_list)
print('список значений давления в трубе ',t.p_end_list)
print('список значений дебитов жидкости ',t.qliq_list)
print('список значений дебитов газа ',t.qgas_list)
check(tsim) # проверим первый блок файлов и выведем результаты
check(tpl) # проверим второй блок файлов и выведем результаты
Для всех расчитанных параметров можно построить карты влияния потока на устойчивость трубопровода. Карта показывает значения коэффциента устойчивости от расхода газа и жидкости, а также отношения коэффициента для "горбатой" трубы по отношению к трубе плоской
def plot_map(pp, pend=10, val='mech', vm = 5, titl = ''):
print('Контрольная точка ',pp, '===================================================================================')
AA = plt.figure(figsize=(17, 6), dpi=70)
ax1 = AA.add_subplot(121)
#print('Карта для для плоского трубопровода')
plt.title('Карта для для плоского трубопровода.' + titl)
a=tsim.get_matr_ql_qg(pipe=pp,p_end=pend,val=val) # расчет карты по данным моделирования
sns.heatmap(a, annot=True,cmap="Reds", vmin=0, vmax=vm, linewidths=.5) # построение визуального представления карты
plt.yticks(rotation="horizontal")
ax2 = AA.add_subplot(122)
#print('Карта трубопровода с "горбом"')
plt.title('Карта трубопровода с "горбом".'+ titl)
b=tpl.get_matr_ql_qg(pipe=pp,p_end=pend,val=val) # расчет карты по данным моделирования
sns.heatmap(b, annot=True,cmap="Greens", vmin=0, vmax=vm, linewidths=.5) # построение визуального представления карты
plt.yticks(rotation="horizontal")
AA.show()
show()
AA = plt.figure(figsize=(17, 6), dpi=70)
ax1 = AA.add_subplot(121)
print('Карта отношений степени воздействия.'+ titl)
plt.title('Карта отношений. '+ titl)
c = b / a
sns.heatmap(c, annot=True, cmap='Blues', vmin=0, vmax=3, linewidths=.5)
show()
# вспомогательная функция для поиска номера трубы в списке
def ipipe(tpl,pp):
pipe_ind = tsim.pipe_list.tolist().index(pp)
return pipe_ind
def plot_trend_example(k,qg,ql,pp,p):
AA = plt.figure(figsize=(17, 6), dpi=70)
ax1 = AA.add_subplot(121)
plt.title('труба плоская. '+ str(k))
d1=tp.plot_trend(tsim,klist=k,qg_num=qg, ql_num=ql,pipe_num=pp,p_num=p)[4:]
plt.plot(d1)
plt.yticks(rotation="horizontal")
ax2 = AA.add_subplot(122)
plt.title('труба с "горбом". '+ str(k))
d2=tp.plot_trend(tpl,klist=k,qg_num=qg, ql_num=ql,pipe_num=pp,p_num=p)[4:]
plt.plot(d2)
plt.yticks(rotation="horizontal")
AA.show()
show()
def plot_trend_super_example(qg,ql,pp,p):
AA = plt.figure(figsize=(17, 6), dpi=70)
ax1 = AA.add_subplot(121)
plt.title('труба плоская. Мех. влияние')
d3 = tp.plot_trend_super(tsim,qg_num=qg, ql_num=ql,pipe_num=pp,p_num=p)
plt.plot(d3)
plt.yticks(rotation="horizontal")
ax2 = AA.add_subplot(122)
plt.title('труба с "горбом". Мех. влияние')
d4 = tp.plot_trend_super(tpl,qg_num=qg, ql_num=ql,pipe_num=pp,p_num=p)
plt.plot(d4)
plt.yticks(rotation="horizontal")
AA.show()
show()
Ниже строятся карты для всех контрольных точек трубопровода
for pp in tsim.pipe_list: # строим для всех контрольных точек
plot_map(pp, val='mech',titl=' Мех.влияние')
Анализ построенных карт показывает, что наибольшее влияния потока на трубу происходит на точках Pipe-7 - Pipe 13
При этом 500 метром горизонтальной трубы практически выравнивают матрицы влияния
plot_map('Pipe-7',pend=10, titl=' Мех.влияние')
Видно, что непосредственно перед горбом уже наблюдается повышенная механическая нагрузка на компенсатор. Усилия выросли примерно в 2 раза (синяя карта)
Рассмотрим карты влияния при давлении 5 атм
plot_map('Pipe-7',pend=5, titl=' Мех.влияние')
Картина качественно не поменялась.
Рассмотрим карты скоростей движения пробок
plot_map('Pipe-7',pend=10, val = 'slug_velocity', vm = 40, titl=' Скорости пробок')
Видно, что для модели скорости выше на 20% - 40%. Чем больше скорость газа - тем больше скорости движения пробок жидкости. Перед разрушением (переходом на режим расслоенного потока) скорость достигают 30 м/сек.
Рассмотрим карты "веса пробок" - разности веса пробок и пузырей между пробками
plot_map('Pipe-7',pend=10, val = 'slug_delta_holdup', vm = 0.3, titl=' Вес пробок')
Видно, что вес пробок снижается при росте скорости газа (чем больше газа тем меньше жидкости и в пробках и в пузырях между пробками)
Построим карты средних длин пробок
plot_map('Pipe-7',pend=10, val = 'slug_length', vm = 200 , titl=' Длина пробок')
plot_map('Pipe-7',pend=10, val = 'bubble_length', vm = 1000, titl = ' Расстояния между пробками')
Расчеты проводились для разных параметров потока. Виртуальное время симуляции за которое оценивались параметры потока составило 1 час. Такой подход к моделированию позволяет построить графики изменения величин во времени.
"""выбираем значения параметров для анализа"""
def plot_trends_t(pp_num = 0):
qg=1 # номер значения дебита газа
ql=8 # номер значения дебита жидкости
pp=pp_num # номер значения дебита участка трубы
p=1 # номер значения дебита давления
k=['HOL','HOLEXP'] # номер значения ключевого слова
print('===== истинное содержание жидкости в потоке ==========')
plot_trend_example(k,qg,ql,pp,p)
print('===== коэффициент механического влияния на компенсатор ==========')
plot_trend_super_example(qg,ql,pp,p)
k=['LSLEXP','LSBEXP'] # номер значения ключевого слова
print('===== длина пробок и расстояние между пробками ==========')
plot_trend_example(k,qg,ql,pp,p)
k=['USG','USL'] # номер значения ключевого слова
print('===== скорости движения жидкости и газа ==========')
plot_trend_example(k,qg,ql,pp,p)
plot_trends_t()
i=0
for pp in tsim.pipe_list:
plot_trends_t(i)
i=i+1